<?php

require_once 'classes/PersonneContact.php';
require_once 'SCinterface.php';
require_once 'classes/Message.php';

/*
 * Classe de service CRUD pour manipuler les enregistrements de Personnes de contacts
 * @author Zikrija
 * @date 04.05.2012
 */
class SCpersonneContact {
    
    private $db;

    /**
     *Contructeur créant l'objet pour la connexion à la DB 
     */
    public function __construct() {
        $this->db = new PDO(ACA_DB_DSN, ACA_DB_USER, ACA_DB_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
        $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }

    /**
    * Ajoute une Personne de contact
    * @param PersonneContact Personne de contact à ajouter
    */
    public function ajouter($unePersonneContactAAjouter) {
        try{

            $query =  $this->db->prepare("INSERT INTO personnecontact " .
                "(roleContact, remarque, personne_id, plainte_id) VALUES(".
                ":roleContact, :remarque, :personne_id, :plainte_id)");

            $query->execute(array(
                'roleContact'   => $unePersonneContactAAjouter->getRoleContact(),
                'remarque'      => $unePersonneContactAAjouter->getRemarque(),
                'personne_id'   => $unePersonneContactAAjouter->getPersonne_id(),
                'plainte_id'    => $unePersonneContactAAjouter->getPlainte_id()
                ));

            $query->closeCursor();
        }
        catch(PDOException $e){
            return new Message("Personne de contact non ajoutée: ".$e->getMessage());
        }
        return $unePersonneContactAAjouter;
   }
    /**
     * Methode permettant de modifier une Personne de contact
     * @param PersonneContact La PersonneContact à modifier
     * @param PersonneContact La PersonneContact contenant les nouvelles valeurs
     * @return boolean 
     */
    public function modifier($uneAnciennePersonneContact, $uneNouvellePersonneContact){
        try{

            $query =  $this->db->prepare("UPDATE personnecontact SET ".
                "roleContact = :nouveauRoleContact, remarque = :nouvelleRemarque, ". 
                "personne_id = :nouvellePersonne_id, plainte_id = :nouvellePlainte_id ".
                "WHERE personne_id = :anciennePersonne_id AND plainte_id = :anciennePlainte_id");

            $query->execute(array(
                'nouveauRoleContact'   => $uneNouvellePersonneContact->getRoleContact(),
                'nouvelleRemarque'     => $uneNouvellePersonneContact->getRemarque(),
                'nouvellePersonne_id'  => $uneNouvellePersonneContact->getPersonne_id() ,
                'nouvellePlainte_id'   => $uneNouvellePersonneContact->getPlainte_id(),
                'anciennePersonne_id'  => $uneAnciennePersonneContact->getPersonne_id(),
                'anciennePlainte_id'   => $uneAnciennePersonneContact->getPlainte_id()
            ));

            $query->closeCursor();



        }
        catch(PDOException $e){
            return new Message("Personne de contact non modifiée: ".$e->getMessage());
        }
        return $uneNouvellePersonneContact;
    }
    /**
     * Methode permettant de supprimer une Personne de contact
     * @param int id de la personne concernée
     * @param int id de la plainte concernée
     * @return boolean 
     */
    public function supprimer($personne_idPersonneContactASupprimer, $plainte_idPersonneContactASupprimer){
        try{
            $query = $this->db->prepare("DELETE FROM personnecontact WHERE personne_id = :personne_id AND plainte_id = :plainte_id");
            $query->execute(array(
                'personne_id'           => $personne_idPersonneContactASupprimer,
                'plainte_id'            => $plainte_idPersonneContactASupprimer
            ));            
            $query->closeCursor();
            
            $message = new Message("Personne de contact supprimée"); 
        }
        catch(PDOException $e){
            print($e->getMessage());
            $message = new Message("Personne de contact non supprimée");
        }
        return $message;
    }
   
    /**
     * 
     * @param PersonneContact de recherche sous forme d'objet Animal
     * @return un tableau d'objet PersonneContact
     */
    public function lister($personneContactALister){
        try{
            $sql="SELECT * FROM PersonneContact ";
            $sql_Where="WHERE";
            if($personneContactALister!=NULL)
            {
                if($personneContactALister->getRoleContact()!=NULL)
                    $sql_Where.=" roleContact = '".$personneContactALister->getRoleContact()."' AND ";
                if($personneContactALister->getPersonne_id()!=NULL)
                    $sql_Where.=" personne_id = '".$personneContactALister->getPersonne_id()."' AND ";
                if($personneContactALister->getPlainte_id()!=NULL)
                    $sql_Where.=" plainte_id = '".$personneContactALister->getPlainte_id()."' AND ";
            }         


            $sql_Where = substr($sql_Where,0,-5);
            $sql.=$sql_Where." ORDER BY roleContact";
            $lesPersonneContactsTrouvees=NULL;
            $unePersonneContactLue=NULL;
            $result=$this->db->query($sql);
            while($row = $result->fetch())
            {   
                $unePersonneContactLue = new PersonneContact($row['roleContact'], $row['remarque'], $row['personne_id'], $row['plainte_id']);

                $lesPersonneContactsTrouvees[]=$unePersonneContactLue;
            }                
        }
        catch(PDOException $e)
        {
            print($e->getMessage());
            $lesPersonneContactsTrouvees=NULL;
        }
        return $lesPersonneContactsTrouvees;
    } 
}

?>
